package Class.Homemade.demo0527.demo2;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-05-27
 * Time: 21:46
 */
class Out {
    public void test1() {
        System.out.println("haha");
    }
}
interface IA {
    void test1();
}
//接口的出现，解决了Java不能多继承的问题：例如，狗是一个动物 并且具备游泳 和 跑的功能
public class Test {
    public static void main(String[] args) {
        //局部内部类：
        //这个类，实现了 IA接口 并且同时重写了test1这个方法
        IA ia = new IA() {
            @Override
            public void test1() {
                System.out.println("hahahaha");
            }
        };
        ia.test1();
        System.out.println("========");
        new Out() {
            //确实是抽象：局部内部类
        }.test1();
        System.out.println("========");
        new Out() {
            //确实是抽象：局部内部类
            @Override
            public void test1() {
                System.out.println("heihei");
            }
        }.test1();
    }
    /*
    Object是Java默认提供的一个类。Java里面除了Object类，所有的类都是存在继承关系的。默认会继承Object父
    类。即所有类的对象都可以使用Object的引用进行接收。
    1.Object接收所有类的对象
    2.在开发之中，Object类是参数的最高统一类型。但是Object类也存在有定义好的一些方法
    3.(1)获取对象信息：可以直接重写Object类中的toString()方法
      (2)对象比较equals方法
      (3)hashcode方法，可以算出一个具体的对象位置。
     */
    public static void main3(String[] args) {
        Dog dog1 = new Dog("旺财", 19);
        Dog dog2 = new Dog("旺财", 19);
        //假设：名字相同，年龄相同：
        //1.对象比较equals方法
        System.out.println(dog1 == dog2);
        System.out.println("======");
        System.out.println(dog1.equals(dog2));
        System.out.println("======");
        System.out.println(dog1.equals(dog1));
        System.out.println("======");
        //2.hashcode方法，可以算出一个具体的对象位置。
        System.out.println(dog1.hashCode());
        System.out.println(dog2.hashCode());
    }
    //跑、游泳、飞翔
    public static void run(IRunning iRunning) {
        iRunning.running();
    }
    public static void swim(ISwimming iSwimming) {
        iSwimming.swimming();
    }
    public static void fly(IFly iFly) {
        iFly.fly();
    }
    public static void main2(String[] args) {
        //跑：Duck、Dog都会
        run(new Dog("旺财", 10));
        run(new Duck("唐老鸭", 19));
        System.out.println("======");
        //游泳：Fish、Duck、Dog都会
        swim(new Dog("旺财", 10));
        swim(new Duck("唐老鸭", 19));
        swim(new Fish("小鱼儿", 24));
        System.out.println("======");
        //飞：Duck会
        fly(new Duck("唐老鸭", 19));
    }
    //普通成员方法，用于调用
    public static void func(Animal animal) {
        animal.eat();
    }

    public static void main1(String[] args) {
        func(new Dog("旺财", 10));
        System.out.println("======");
        func(new Duck("唐老鸭", 19));
        System.out.println("======");
        func(new Fish("小鱼儿", 24));
    }
}
